package cn.edu.fzu.delivery.service;

import cn.edu.fzu.delivery.domain.entity.NetWorkDay;
import cn.edu.fzu.delivery.domain.entity.Network;
import cn.edu.fzu.delivery.domain.entity.NetworkApply;
import cn.edu.fzu.delivery.domain.entity.SysUser;
import cn.edu.fzu.delivery.domain.enums.NetWorkStatusEnum;
import cn.edu.fzu.delivery.domain.enums.NetworkApplyStatusEnum;

import java.util.Date;
import java.util.List;

/**
 * @author yifan
 * @date 2022/11/6
 */
public interface NetworkService {

    /**
     * 查询网点
     *
     * @param name       名称
     * @param provinceId 省id
     * @param cityId     市id
     * @param areaId     地区id
     * @param address    详细地址
     * @param status     状态
     * @return
     */
    List<Network> listNetwork(String name, Long provinceId, Long cityId, Long areaId, String address,
                              NetWorkStatusEnum status);

    List<Network> searchByName(String name);

    /**
     * 更新网点信息
     *
     * @param id          id
     * @param name        名称
     * @param areaId      地区id
     * @param address     详细地址
     * @param desc        备注
     * @param currentUser 当前用户
     */
    void update(Long id, String name, Long areaId, String address, String desc, SysUser currentUser);


    /**
     * 更新网点状态
     *
     * @param id id
     * @param status 状态
     * @param currentUser 当前用户
     * @return
     */
    void updateStatus(Long id, NetWorkStatusEnum status, SysUser currentUser);


    /**
     * 注册网点
     *
     * @param name        名称
     * @param areaId      地区id
     * @param address     详细地址
     * @param desc        备注
     * @param currentUser 当前用户
     * @return
     */
    void add(String name, Long areaId, String address, String desc, SysUser currentUser);


    /**
     * 申请网点
     *
     * @param name        名称
     * @param areaId      地区id
     * @param address     详细地址
     * @param desc        备注
     * @param applicantId 申请人id
     * @param curUser     当前用户
     */
    @Deprecated
    void apply(String name, Long areaId, String address, String desc, Long applicantId, SysUser curUser);

    /**
     * 处理网点申请
     *
     * @param id 申请id
     * @param status 审核状态
     * @param currentUser 当前用户
     */
    @Deprecated
    void handleApply(Long id, NetworkApplyStatusEnum status, SysUser currentUser);


    /**
     * 获取网点申请列表
     *
     * @param name        名称
     * @param provinceId  省id
     * @param cityId      市id
     * @param areaId      区id
     * @param address     详细地址
     * @param desc        备注
     * @param applicantId 申请人id
     * @param reviewerId  审核人id
     * @param status      状态
     * @param startTime   申请时间区间左边界
     * @param endTime     申请时间区间右边界
     * @param currentUser 当前用户
     * @return
     */
    @Deprecated
    List<NetworkApply> listApply(String name, Long provinceId, Long cityId, Long areaId, String address,
                                 String desc, Long applicantId, Long reviewerId, NetworkApplyStatusEnum status,
                                 Date startTime, Date endTime, SysUser currentUser);

    List<NetWorkDay> listNetWorkDay();

    /**
     * 获取网点路线列表
     *
     * @param networkId1  网点id1
     * @param networkId2  网点id2
     * @param day      路程耗时（单位：天）
     * @return
     */
    List<NetWorkDay> listNetWorkDay(Long networkId1, Long networkId2, Integer day);

    /**
     * 添加网点路线
     * @param networkId1  网点id1
     * @param networkId2  网点id2
     * @param day      路程耗时（单位：天）
     */
    void addNetworkDay(Long networkId1, Long networkId2, Integer day);

    /**
     * 删除网点路线
     * @param id 网点路线id
     * @param currentUser 当前用户
     */
    void deleteNetworkDay(Long id, SysUser currentUser);

    /**
     * 更新网点路线
     */
    void updateNetworkDay(Long id, Long networkId1, Long networkId2, Integer day);

    /**
     * 根据id查询网点
     * @param id
     * @return
     */
    Network getById(Long id);
}
